﻿#define _CRT_SECURE_NO_WARNINGS 1

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param sum int整型
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > FindContinuousSequence(int sum)
    {
        if (sum == 0)
        {
            return vector<vector<int>>();
        }
        vector<vector<int>> result;
        int slow = 1;
        int hight = 2;
        while (slow < hight)
        {
            int total = (slow + hight) * (hight - slow + 1) / 2;
            if (total == sum)
            {
                vector<int> vec;
                for (int i = slow; i <= hight; ++i)
                {
                    vec.push_back(i);
                }
                result.push_back(vec);
                ++slow;//hight自己会调整
            }
            else if (total < sum)
            {
                ++hight;
            }
            else
            {
                ++slow;
            }
        }
        return result;
    }
};

/*
描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?

数据范围：0<n≤100
进阶：时间复杂度O(n)
返回值描述：
输出所有和为S的连续正数序列。序列内按照从小至大的顺序，序列间按照开始数字从小到大的顺序
示例1
输入：
9
复制
返回值：
[[2,3,4],[4,5]]

*/

